package com.example.pre.tools;

import net.sf.json.JSONObject;

/**
 * 用户登录验证工具类
 * 
 * @ClassName: TokenTools.java
 * @Description: 描述
 */
public class TokenTools {

	/**
	 * 验证token是否有效，有效返回 密码 无效返回null
	 * 
	 * @param token          验证信息
	 * @param userType       用户类型
	 * @param userIdentityId 用户编号
	 * @param userId         用户id
	 * @return
	 */
	public static String checkToken(String token, String userType, String userIdentityId, int userId) {
		if (token == null) {
			// 未登录
			return null;
		}
		if (userType == null || "".equals(userType)) {
			return null;
		}
		if (userIdentityId == null) {
			return null;
		}
		if (userId == -1) {
			return null;
		}
		// 解密
		String str = AESUtil.decode(token);
		if (str == null) {
			return null;
		}
		JSONObject msg = JSONObject.fromObject(str);
		// 验证信息是否匹配
		if (!userType.equals(msg.getString("userType"))) {
			// 用户类型不匹配
			return null;
		}
		if (userId != msg.getInt("userId")) {
			// 用户id不匹配
			return null;
		}
		if (!userIdentityId.equals(msg.getString("userIdentityId"))) {
			// 电话号不匹配
			return null;
		}
		// 验证通过,返回密码
		if (!msg.containsKey("pwd")) {
			return null;
		}
		return msg.getString("pwd");
	}

	/**
	 * 获取登录标识
	 * 
	 * @param token TOKEN 信息
	 * @return loginKey
	 */
	public static String getLoginKey(String token) {
		if (token == null) {
			// 未登录
			return null;
		}
		// 解密
		String str = AESUtil.decode(token);
		if (str == null) {
			return null;
		}
		JSONObject msg = JSONObject.fromObject(str);
		// 验证通过,返回密码
		if (!msg.containsKey("loginKey")) {
			return null;
		}
		return msg.getString("loginKey");
	}

	/**
	 * 根据用户信息生成token
	 * 
	 * @param userType       用户类型
	 * @param userIdentityId 用户编号
	 * @param userId         用户id
	 * @param pwd            密码
	 * @param loginKey       登录标识，用于单点登录
	 * @return
	 */
	public static String createToken(String userType, String userIdentityId, int userId, String pwd, String loginKey) {
		JSONObject json = new JSONObject();
		json.put("userType", userType);
		json.put("userIdentityId", userIdentityId);
		json.put("userId", userId);
		json.put("pwd", pwd);
		json.put("loginKey", loginKey);
		String token = AESUtil.encode(json.toString());
		return token;
	}

}
